package P150;

/**
 * @author LiangMu
 * @version \$Id: P10.java, v 0.1, 2024年07月01日 22:31 LiangMu Exp $$
 */
public class P10 {
    /**
     * 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。
     *
     * 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说，如果你在 nums[i] 处，你可以跳转到任意 nums[i + j] 处:
     *
     * 0 <= j <= nums[i]
     * i + j < n
     * 返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。
     *
     *
     *
     * 示例 1:
     *
     * 输入: nums = [2,3,1,1,4]
     * 输出: 2
     * 解释: 跳到最后一个位置的最小跳跃数是 2。
     *      从下标为 0 跳到下标为 1 的位置，跳 1 步，然后跳 3 步到达数组的最后一个位置。
     * 示例 2:
     *
     * 输入: nums = [2,3,0,1,4]
     * 输出: 2
     */


    public static int jump(int[] nums) {
        if (nums.length <= 1) {
            return 0;
        }
        int jump = nums[0];
        int count = 1;
        int index = 1;
        while (jump < nums.length - 1) {
            int j = jump;
            while (index <= jump) {
                int temp = nums[index] + index;
                j = Math.max(j, temp);
                ++index;
            }
            jump = j;
            count++;
        }
        return count;
    }


    /**
     *         if (nums.size < 2) return 0
     *         var count = 1
     *         var start = 0
     *         var end = nums[0]
     *         while (end < nums.size - 1) {
     *             val turn = end
     *             while (start <= turn) {
     *                 end = end.coerceAtLeast(nums[start] + start)
     *                 ++start
     *             }
     *             ++count
     *         }
     *         return count
     * @param args
     */

    public static void main(String[] args) {

    }
}
